/* eslint-disable no-async-promise-executor */
// const { getFile } = require('../models/getfile')
const model = require('../models/model')
const Files = model.files.Files // 获取模型
const { getFile } = require('../models/getfile')
const fs = require('fs');
const path = require('path')
const dirnameImage = path.join(__dirname, '../../server-files/images') // 存放文件的目录

// 获取文件地址
exports.getImageUrl = async(ctx) => {
  const { ids } = ctx.request.body
  if (!ids) {
    ctx.fail('参数错误')
    return
  }
  const res = await getFile(ids)
  if(res) {
    ctx.success(res)
  }
}
// 删除七牛云文件资源
exports.deleteImage = async(ctx) => {
  const { deleteQinniu } = require('../util')
  const { ids } = ctx.request.query
  if (!ids) {
    ctx.fail('参数错误')
    return
  }
  const idList = ids.split(',').filter(item => item !== '')
  
  function deleteFile(id) {
    return new Promise(async(resolve) => {
      const res = await Files.findOne({ where: { id: id }})
      if (res) {
        await deleteQinniu(`${res.id}.${res.type}`) // 七牛云删除
        await Files.destroy({ where: { id: res.id }}) // 数据库删除
        resolve() // 直接返回成功 忽视报错
      } else { // 没有找到数据库对应数据直接返回
        resolve()
      }
    })
  }

  let flag = 0
  for (let i = 0; i < idList.length; i++) {
    await deleteFile(idList[i]).then(() => {
      flag++
      if (flag === idList.length) {
        ctx.success('', '删除成功')
      }
    })
  }
}

// 删除本地服务器文件
exports.deleteLocalImage = async (ctx) => {
  const { ids } = ctx.request.query
  if (!ids) {
    ctx.fail('参数错误')
    return
  }
  const idList = ids.split(',').filter(item => item !== '')
  
  function fsHandle(filePath) {
    // 删除文件
    fs.unlink(filePath, (err) => {
      if (err) {
        console.error(err);
        return;
      }
    });
  }
  function deleteFileItem(id) {
    return new Promise(async(resolve) => {
      const res = await Files.findOne({ where: { id: id }})
      if (res) {
        await Files.destroy({ where: { id: res.id }}) // 数据库删除
        let filePath = dirnameImage + `/${res.id}.${res.type}`
        fsHandle(filePath)
        resolve() // 直接返回成功 忽视报错
      } else {
        // 没有找到数据库对应数据直接返回
        resolve()
      }
    })
  }
  let flag = 0
  for (let i = 0; i < idList.length; i++) {
    await deleteFileItem(idList[i]).then(() => {
      flag++
      if (flag === idList.length) {
        ctx.success('', '删除成功')
      }
    })
  }
}
